home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-04 / vol11n08.zip / DOW.C < prev    next >
C/C++ Source or Header  |  1991-12-30  |  1KB  |  49 lines

  1. // dow.c
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4.  
  5. int dow(int month, int day, int year)
  6.     {
  7.     const signed char calendar[12] =
  8.         {
  9.         0, 1, -1, 0, 0, 1, 1, 2, 3, 3, 4, 4    // base 30
  10.         };
  11.     return
  12.         ((  ((year-1) * 365L)       // # days of normal years, previous
  13.             + ((year-1) / 4)        // # of possible leap days
  14.             - (((year-1) / 100)     // # of non-century leap days
  15.             - ((year-1) / 400)
  16.             )
  17.                                     // # of days in month passed
  18.         + (calendar[month-1] + ((month-1)*30))     
  19.         + ((
  20.           ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
  21.             && (month > 2)
  22.            )
  23.         + day)
  24.         % 7);
  25.     }
  26.  
  27.  
  28. void main(int argc, char **argv)
  29.     {
  30.     int day, month, year;
  31.  
  32.     const char *daystr[7] =
  33.         { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
  34.  
  35.     if(argc != 4)
  36.         {
  37.         printf("Enter date [mm dd yyyy]: ");
  38.         scanf("%d %d %d", &month, &day, &year);
  39.         }
  40.     else
  41.         {
  42.         month = atoi(argv[1]);
  43.         day = atoi(argv[2]);
  44.         year = atoi(argv[3]);
  45.         }
  46.     printf("%02d/%02d/%04d is on %s\n", 
  47.         month,day,year, daystr[dow(month,day,year)]);
  48.     }
  49.